/*
 *  Copyright (C) 1993  Robert Davis
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of Version 2, or any later version, of 
 *  the GNU General Public License as published by the Free Software 
 *  Foundation.
 */


static char RCSId[]="$Id: OptionsPanel.m,v 1.9 1993/05/18 03:55:27 davis Exp $";


#import <appkit/Application.h>
#import <appkit/Cell.h>
#import <appkit/Matrix.h>
#import <appkit/Panel.h>
#import <appkit/Text.h>

#import "Gnuplot.h"
#import "GnuplotPlot.h"
#import "OptionsPanel.h"


@interface OptionsPanel (Private)

- _updatePanel;

@end


@implementation OptionsPanel

- init
{
    [super init];
    return self;
}


- free
{
    [panel free];
    return [super free];
}


- panel
{
    return panel;
}



- showPanel:sender
{
    [panel orderFront:self];
    return self;
}


- forceUpdate
{
    id mainWindow = [NXApp mainWindow];

    if (mainWindow)
	status = [[mainWindow delegate] status];
    else
	status = nil;

    [self _updatePanel];

    return self;
}


- windowDidUpdate:sender
{
    id		mainWindow = [NXApp mainWindow];
    Status	*newStatus;

    if (mainWindow)
	newStatus = [[mainWindow delegate] status];
    else {
	id	doc;
	if (doc = [[NXApp delegate] currentDoc])
	    newStatus = [doc status];
	else
	    newStatus = nil;
    }

    if (newStatus != status) {
	status = newStatus;
	[self _updatePanel];
    }

    return self;
}


// Shuts up the compiler about unused RCSId
- (const char *) rcsid
{
    return RCSId;
}



- textDidEnd:textObject endChar:(unsigned short)whyEnd
{
    /*  
     *  Normally, a text-based control's action is sent only when 
     *  editting ends with a Return.  We use this method to send the 
     *  action on Tab and Backtab, too.
     */

    if (_textChanged && ((whyEnd == NX_TAB) || (whyEnd == NX_BACKTAB)))  {

	id	control = [textObject delegate];
	Cell	*editCell;

	/*  
	 *  If the Control is a Matrix, we check to see if the Cell 
	 *  being edited has an action, in which case we send it to 
	 *  the Cell's target.  Otherwise send the Control's action to 
	 *  the Control's target.
	 */
	
	if ([control isKindOf:[Matrix class]] &&
	    [(editCell = [control selectedCell]) action])

	    [[editCell controlView] sendAction:[editCell action]
					    to:[editCell target]];

	else			/* Otherwise, do the control's action	*/

	    [control sendAction:[control action] to:[control target]];

    }

    _textChanged = NO;

    return self;
}



- (BOOL) textWillChange:textObject
{
    _textChanged = YES;
    return NO;		/* NO means it's okay for the text to change	*/
}



@end






@implementation OptionsPanel (Private)


- _updatePanel
{
    return self;
}


@end
